package com.example.day3.stream;

import java.util.Comparator;
import java.util.stream.Stream;

/**
 * 去重-排序
 */
public class C09SortTest {
    public static void main(String[] args) {

        // 去重
        // IntStream.of(1, 2, 3, 1, 2, 3, 3, 4, 5).distinct().forEach(System.out::println);

        // 排序
        Stream.of(
                        new Hero("令狐冲", 90),
                        new Hero("风清扬", 98),
                        new Hero("独孤求败", 100),
                        new Hero("方证", 92),
                        new Hero("东方不败", 98),
                        new Hero("冲虚", 90),
                        new Hero("向问天", 88),
                        new Hero("任我行", 92),
                        new Hero("不戒", 88)
                )
                // .sorted((a, b) -> a.strength() < b.strength() ? -1 : a.strength() == b.strength() ? 0 : 1)
                // 简化上面的写法
                // .sorted((a, b) -> a.strength() - b.strength())
                // 也可以使用Integer.compare方法
                // .sorted((a, b) -> Integer.compare(a.strength(), b.strength()))
                // 使用Comparator中的comparingInt方法
                // .sorted(Comparator.comparingInt(h -> h.strength()))
                // 使用方法引用简化,并且调用reversed方法倒序输出
                // .sorted(Comparator.comparingInt(Hero::strength).reversed()) // 按武力降序

                // 需求：按武力降序输出,如果武力值相同,按名字长度升序输出
                // thenComparingInt该方法运行在当第一Comparator返回0的时候也就是武力值相同时,再按名字长度升序输出
                .sorted(Comparator.comparingInt(Hero::strength).reversed().thenComparingInt(h -> h.name().length()))
                .forEach(System.out::println);
    }

    record Hero(String name, int strength) {

    }
}
